---
sidebar_position: 5
---

# Шаг 3. Подключение библиотек для трассировки приложения

[**Трассировки**](https://opentelemetry.io/docs/concepts/signals/traces/) дают нам общую картину того, что происходит, когда запрос отправляется в приложение. Независимо от того, является ли ваше приложение монолитом с единой базой данных или сложной сетью сервисов, трассировки необходимы для понимания полного “пути”, по которому запрос проходит в вашем приложении.

Обновите `app.py` следующим образом:

```python
from flask import Flask
from random import randint
# highlight-start
from opentelemetry import trace
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk.trace.export import ConsoleSpanExporter

provider = TracerProvider()
processor = BatchSpanProcessor(ConsoleSpanExporter())
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
tracer = trace.get_tracer(__name__)
# highlight-end

app = Flask(__name__)


def roll():
    return randint(1, 6)


@app.route("/rolldice")
def roll_dice():
    with tracer.start_as_current_span("server_request"):
        return str(roll())

```

Теперь вы можете запустить свое приложение с отображением трассировки в консоли:

```bash
flask run -p 8080
```

Откройте [http://localhost:8080/rolldice](http://localhost:8080/rolldice) в своем веб-браузере и перезагрузите страницу несколько раз. Через некоторое время вы должны увидеть в консоли вывод с подробной информацией о трассировке и метриках. Например, следующее:

<details>
  <summary>Просмотр примера выходных данных</summary>
  <div>

```json
{
    "name": "server_request",
    "context": {
        "trace_id": "0x8bb247903948c22b88461d46e8aec344",
        "span_id": "0xae649d59ab3e5eb8",
        "trace_state": "[]"
    },
    "kind": "SpanKind.INTERNAL",
    "parent_id": null,
    "start_time": "2023-11-15T13:47:54.674268Z",
    "end_time": "2023-11-15T13:47:54.674328Z",
    "status": {
        "status_code": "UNSET"
    },
    "attributes": {},
    "events": [],
    "links": [],
    "resource": {
        "attributes": {
            "telemetry.sdk.language": "python",
            "telemetry.sdk.name": "opentelemetry",
            "telemetry.sdk.version": "1.21.0",
            "service.name": "unknown_service"
        },
        "schema_url": ""
    }
}
```

  </div>
</details>
